# Importacion de librerias
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import squarify
data = pd.read_csv("datos.csv")
data.head()
| Rank | Name | Platform | Year | Genre | Publisher | NA_Sales | EU_Sales | JP_Sales | Other_Sales | Global_Sales | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | Wii Sports | Wii | 2006.0 | Sports | Nintendo | 41.49 | 29.02 | 3.77 | 8.46 | 82.74 |
| 1 | 2 | Super Mario Bros. | NES | 1985.0 | Platform | Nintendo | 29.08 | 3.58 | 6.81 | 0.77 | 40.24 |
| 2 | 3 | Mario Kart Wii | Wii | 2008.0 | Racing | Nintendo | 15.85 | 12.88 | 3.79 | 3.31 | 35.82 |
| 3 | 4 | Wii Sports Resort | Wii | 2009.0 | Sports | Nintendo | 15.75 | 11.01 | 3.28 | 2.96 | 33.00 |
| 4 | 5 | Pokemon Red/Pokemon Blue | GB | 1996.0 | Role-Playing | Nintendo | 11.27 | 8.89 | 10.22 | 1.00 | 31.37 |
df = data[data.Year.notnull()]
companys = {"NINTENDO":['Wii', 'NES', 'GB', 'DS', 'SNES', 'GBA','3DS', 'N64','WiiU','GC'],
"MICROSOFT":['X360', 'XOne','XB'],
"SONY":['PS3', 'PS2', 'PS4'],
"PC":['PC'],
"ATARI":['2600'],
"SEGA":['GEN','DC','SAT','SCD',"GG"],
"NEO GEO":['NG'],
"NEC":["TC16", "PCFX"],
"PANASONIC":['3DO'],
"BANDAI":['WS']}
new_dic = {}
for k,v in companys.items():
for x in v:
new_dic.setdefault(x,[]).append(k)
df['company'] = df['Platform'].map(new_dic)
df = df.explode('company')
company_games = df.copy()
company_games.company = company_games.company.replace(to_replace=["NEO GEO", "BANDAI","PANASONIC","NEC","ATARI","SEGA"],value="OTHER")
company_games = company_games.company.value_counts().rename_axis('unique_values').to_frame('counts')
company_games.rename(columns = {'counts':""},inplace = True)
C:\Users\Tao\AppData\Local\Temp\ipykernel_23984\1166033855.py:15: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df['company'] = df['Platform'].map(new_dic)
nintendo_games = df[df["company"]=="NINTENDO"]
dataa = {'Companys': ['Bandai', 'Sega', 'Nintendo', 'Atari','others'],
'games': [nintendo_games.Publisher.str.contains('Bandai').sum(), nintendo_games.Publisher.str.contains('Sega').sum(), nintendo_games.Publisher.str.contains('Nintendo').sum(), nintendo_games.Publisher.str.contains('Atari').sum(),len(nintendo_games[nintendo_games.Publisher.str.contains('Sega|Bandai|Nintendo|Atari')== False])]}
games_in_nintendo = pd.DataFrame(dataa)
datab = {'Companys': ['Bandai', 'Sega', 'Nintendo', 'Atari','others',"Sony","Micorsoft"],
'games': [df.Publisher.str.contains('Bandai').sum(), df.Publisher.str.contains('Sega').sum(), df.Publisher.str.contains('Nintendo').sum(), df.Publisher.str.contains('Atari').sum(),len(df[df.Publisher.str.contains('Sega|Bandai|Nintendo|Atari')== False]),df.Publisher.str.contains('Sony').sum(),df.Publisher.str.contains('Microsoft').sum()]}
games_in_consoles = pd.DataFrame(datab)
Antes de presentar los hallazgos e información encontrada, cabe destacar que se eliminaran 271 juegos por falta de año, esto con el fin de no afectar la información presentada, cabe destacar que los datos eliminados representan solo el 1.63% de la data completa.
data2 = data[data.Year.isnull()]
data2 = data2[["Name","Platform"]]
data2 =data2.groupby("Platform").count()
data2.rename(columns = {'Name':"sin año"},inplace = True)
data2 =data2.sort_values("sin año")
data2.plot(kind="barh",figsize=(15,8))
for index, value in enumerate(data2["sin año"]):
plt.text(value, index, str(value))
plt.title("Juegos sin año en la base")
plt.xlabel("Juegos")
plt.ylabel('Consola')
plt.show()
En la imagen anterior se logra apreciar detalladamente que estos datos ausentes están presentes en más de una consola, y aunque parecen ser varios juegos, a la hora de ver la siguiente gráfica cambiará la perspectiva
data3 = data[data.Year.notnull()]
data3 = data3[["Name","Platform"]]
data3 =data3.groupby("Platform").count()
data3.rename(columns = {'Name':"Con año"},inplace = True)
data3 =data3.sort_values("Con año")
datacomparacion = pd.concat([data2, data3], axis=1)
datacomparacion = datacomparacion.fillna(0)
datacomparacion = datacomparacion.sort_values("Con año")
datacomparacion.plot(kind="barh",figsize=(15,8))
plt.title("Comparacion por consolas con años ausentes")
plt.xlabel("Consolas")
plt.ylabel("Juegos")
plt.legend([datacomparacion.columns[0], datacomparacion.columns[1]],title="Juegos")
plt.grid()
plt.show()
Gracias a esta comparación, la imputación de los juegos con falta de año no será representativa, es decir, no afectará en el análisis e insights encontrados más adelante.
Con esta imputación, la base de datos dejará de tener datos ausentes. Otra columna que presentaba ausencia es la editorial o mejor dicho, la compañía de juegos encargada de su desarrollo.
df.Year.min()
1980.0
df.Year.max()
2020.0
df.Platform.nunique()
31
Se analizaran los 40 años que llevan las consolas en el mercado con sus 31 consolas diferentes, no obstante, como varias consolas pertenecen a un mismo fabricante, se deberá de contemplar esto
plot = company_games.plot.pie(y='', title="Compañias de Juegos", legend=False,
autopct='%1.1f%%', shadow=True, startangle=0)
Debido a la baja presencia de otras compañías, se decidió juntar estas, pues representan solo el 2.9% de los juegos. Bien, es cierto que se eliminaron juegos previamente por la falta del año, pero su representación no cambia, y es debido a que las compañías encargadas de esas consolas hoy en día dejaron de estar en el mercado, al menos, presentes con consolas
companys1 = df.groupby(['Year',"company"])["Platform"].count().reset_index()
companys2 = df.groupby(['Year',"company"])["Global_Sales"].sum().reset_index()
companys = companys1.merge(companys2, on=['Year', 'company'])
companys.Year = companys.Year.astype(int)
fig = px.line(companys, x="Year", y="company", color='company',title="Compañias a travez de los años")
fig.show()
ATARI aunque haya sido el pionero en consolas, 6 años despues desaparecio, siendo esta la segunda compañía con mayor duración en el mercado antes de desaparecer, el primero es SEGA con 18 años, y aunque hayan dejado de fabricar consolas, los juegos siguen estando presentes en consolas o bien, alguno de sus personajes como el caso de SONIC
df.company = df.company.replace(to_replace=["NEO GEO", "BANDAI","PANASONIC","NEC","ATARI","SEGA"],value="OTHER")
companys.company= companys.company.replace(["NEO GEO", "BANDAI","PANASONIC","NEC","ATARI","SEGA"],value="OTHER")
NINTENDO = companys[companys["company"]=="NINTENDO"]\
.groupby("Year")["Platform"].sum().reset_index()
MICROSOFT = companys[companys["company"]=="MICROSOFT"]\
.groupby("Year")["Platform"].sum().reset_index()
SONY = companys[companys["company"]=="SONY"]\
.groupby("Year")["Platform"].sum().reset_index()
PC = companys[companys["company"]=="PC"]\
.groupby("Year")["Platform"].sum().reset_index()
OTHER = companys[companys["company"]=="OTHER"]\
.groupby("Year")["Platform"].sum().reset_index()
STACK_COMPLETE = pd.merge(MICROSOFT, SONY, on='Year', how='outer',suffixes=[None,'_1'])
STACK_COMPLETE = pd.merge(STACK_COMPLETE, PC, on='Year', how='outer',suffixes=[None,'_2'])
STACK_COMPLETE = pd.merge(STACK_COMPLETE, NINTENDO, on='Year', how='outer',suffixes=[None,'_3'])
STACK_COMPLETE = pd.merge(STACK_COMPLETE, OTHER, on='Year', how='outer',suffixes=[None,'_4'])
STACK_COMPLETE.fillna(0, inplace=True)
STACK_COMPLETE.sort_values(by='Year', ascending=True,inplace=True)
STACK_COMPLETE.rename(columns = {STACK_COMPLETE.columns[1]:'MICROSOFT',STACK_COMPLETE.columns[2]:'SONY',STACK_COMPLETE.columns[3]:"PC",STACK_COMPLETE.columns[4]:'NINTENDO',STACK_COMPLETE.columns[5]:'OTHER'}, inplace = True)
STACK_COMPLETE.reset_index(inplace=True,drop=True)
NINTENDOa,MICROSOFTa, SONYa, PCa, OTHERa,yearsa = np.array(STACK_COMPLETE.loc[:,'NINTENDO'].tolist()),np.array(STACK_COMPLETE.loc[:,'MICROSOFT'].tolist()),np.array(STACK_COMPLETE.loc[:,'SONY'].tolist()),np.array(STACK_COMPLETE.loc[:,'PC'].tolist()),np.array(STACK_COMPLETE.loc[:,'OTHER'].tolist()),np.array(STACK_COMPLETE.loc[:,'Year'].tolist())
NINTENDOap = NINTENDOa / (NINTENDOa+MICROSOFTa+ SONYa+ PCa+ OTHERa)
MICROSOFTap = MICROSOFTa / (NINTENDOa+MICROSOFTa+ SONYa+ PCa+ OTHERa)
SONYap = SONYa / (NINTENDOa+MICROSOFTa+ SONYa+ PCa+ OTHERa)
PCap = PCa / (NINTENDOa+MICROSOFTa+ SONYa+ PCa+ OTHERa)
OTHERap = OTHERa / (NINTENDOa+MICROSOFTa+ SONYa+ PCa+ OTHERa)
fig = px.bar(companys, x="Year", y="Platform", color="company",title="Juegos por año")
fig.show()
Aparentemente Nintendo ha estado más presente con sus juegos durante más de 2 décadas, pero aunque el gráfico nos da información, el siguiente gráfico muestra la verdadera ocupación de las compañías en los mercados
plt.stackplot(yearsa,NINTENDOap,MICROSOFTap, SONYap, PCap, OTHERap)
plt.title("Compañias en el mercado")
plt.xlabel("year")
plt.ylabel("company")
plt.legend(["Nintendo", "Microsoft", "Sony", "PC", "Other"])
plt.show()
Al menos en el presente siglo, Nintendo está liderando el mercado de juegos, seguido de Sony. si bien, antes de la llegada de nintendo, el mercado le pertenecía a atari, y aunque haya tenido competencia con la PC, esta siempre ha estado mayormente presente en los juegos, lo cual quiere decir que un niño va a preferir una consola que una pc
fig = px.line(companys, x="Year", y="Global_Sales", color='company',title="Ventas globales por año")
fig.show()
Las ventas lo confirman, no obstante, Microsoft ha tenido un mayor impulso en ventas entre el 2006 y 2010 en comparación a sony
games_in_nintendo = games_in_nintendo.set_index('Companys')
plot = games_in_nintendo.plot.pie(y='games', title="Compañias como desarrolladores en nintendo", legend=False,
autopct='%1.1f%%', shadow=True, startangle=0)
Como se mencionó anteriormente, las compañías que fabricaban videojuegos siguen estando presente en las consolas actuales con un gran porcentaje, no obstante, las compañías dueñas de las consolas no lo están, dejan a otras compañías hacer los juegos para ellas, esto puede resultar tanto oportunidad como amenaza, debido a que al no pertenecer a ellas, los juegos pueden ser multi plataforma.
# Print the output.
games_in_consoles = games_in_consoles.set_index('Companys')
plot = games_in_consoles.plot.pie(y='games', title="Compañias como desarrolladores en consolas", legend=False,
autopct='%1.1f%%', shadow=True, startangle=0)
Cuando se ven las compañías pioneras o que estaban en el mercado de las consolas, bandai es el más presente en todas las consolas, seguida de sony y nintendo, aunque estas dos últimas se centran más en sus consolas, es decir, los juegos son exclusivos
custom_palette = sns.color_palette("Paired", 12)
plt.figure(figsize=(15, 10))
plt.grid()
sns.countplot(x="Genre", data=nintendo_games, order = nintendo_games['Genre'].value_counts().index,palette=custom_palette)
<Axes: xlabel='Genre', ylabel='count'>
Los juegos que tienden a desarrollarse más en nintendo son de acción, musicales y de deportes, dando así un rubro más familiar en comparación a su competencia
sales_by_year_genre = df.groupby(['Year', 'Genre'])['Global_Sales'].sum().reset_index()
fig = px.bar(sales_by_year_genre, x='Year', y='Global_Sales', color='Genre',
animation_frame='Year', range_y=[0, 500],
title='Ventas globales de videojuegos por año y género',range_x = [1980,2020])
fig.show()
Se puede ver en la animación como los juegos de acción están presentes año con año pero su auge inicia en el 2000
prueba = df[df["company"]=="NINTENDO"]
comp_genre = df[['Genre', "Global_Sales","company"]]
comp_map = comp_genre.groupby(by=['Genre',"company"]).sum()
comp_table = comp_map.reset_index()
comp_table = pd.melt(comp_table, id_vars=['Genre',"company"], value_vars=['Global_Sales'], var_name='Sale_Area', value_name='Sale_Price')
custom_palette = sns.color_palette("Paired", 12)
plt.figure(figsize=(15, 10))
plt.grid()
sns.barplot(x='company', y='Sale_Price', hue='Genre', data=comp_table, palette=custom_palette)
<Axes: xlabel='company', ylabel='Sale_Price'>
Los juegos que más Lideran las ventas en nintendo son los de plataforma, es decir, los exclusivos de nintendo como lo son Mario bros, DK y the legend of zelda.
En cuestión de acción Sony es el líder y en cuanto a shooters Microsoft, aunque, no se queda tan atrás Sony.
sales_by_platform = df.groupby(['Platform','company'])['Global_Sales'].sum().reset_index()
sales_by_platform = sales_by_platform.sort_values('Global_Sales', ascending=False)
fig = px.treemap(sales_by_platform,path=[px.Constant("Platform"), 'Platform'], values='Global_Sales',
title='Ventas globales por consola de videojuegos')
fig.show()
sales_by_platform = df.groupby(['Platform','company',"Year"])['Global_Sales'].sum().reset_index()
sales_by_platform = sales_by_platform.sort_values('Global_Sales', ascending=False)
fig = px.treemap(sales_by_platform,path=[px.Constant("company"), 'company'], values='Global_Sales',
title='Ventas globales por compañia de videojuegos')
fig.show()
Aunque el ps2 y ps3 hayan sido un éxito en ventas , nintendo con sus más de sus 9 consolas, está en la cabeza con aproximadamente mil millones por encima de sony